RestTemplate调用第三方接口报错:No instances avaliable for ip
前言
遇到的坑: restTemplate 调用外部接口 ,一直报错; No instances avaliable for ip地址
分析原因
在启动类的时候添加了
@Bean @LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder builder){ RestTemplate restTemplate = builder.build(); return restTemplate; }
|
我使用这个bean去调用第三方接口, 重点在这里, restTemplate加上负载均衡注解后,就会去注册中心寻找服务. 因为是第三方的服务,所以当然报找不到实例;
解决办法
第三方调用
重新注入一个restTemplate bean; 修改名称,然后获取这个restTemplate去调用第三方接口
@Bean(name="RestTemplate2") public RestTemplate restTemplateRemote() { return new RestTemplate(); }
|
调用的类里面
@Autowired @Qualifier(value = "RestTemplate2") private RestTemplate restTemplate;
@GetMapping("/test") public String testRest(){ String url = "https://xxxx.xxxx.xxx.cn/xxxxx/student"; String studentCode = "0238a55e-2e5c-4866-bf79-xxxxxxxx8888@123456";
HttpHeaders headers = new HttpHeaders(); MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); map.add("studentCode",studentCode); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers); System.out.println("testRest start"); String msg = restTemplate.postForObject(url, param,String.class); System.out.println(msg); return "成功"; }
|
普通调用
@LoadBalanced @Bean(name="RestTemplate") public RestTemplate restTemplateRemote() { return new RestTemplate(); }
|
同一个nacos实例互相调用
@RequestMapping("/add") public String add(){ System.out.println("下单成功"); String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class); return msg; }
|
版权声明: 此文章版权归Chankeitin所有,如有转载,请註明来自原作者